/**
 * Copyright (2017, ) Institute of Software, Chinese Academy of Sciences
 * Copyright (2017, ) Bocloud Co,. Lmt
 */
package cn.abcsys.devops.core;

import java.util.List;

import cn.abcsys.devops.core.runtime.Cluster;

/**
 * @author wuheng@{otcaix.iscsa.ac.cn,beyondcent.com}
 * @date   May 19, 2017
 *
 * <code>Runtime<code>是运行时概念
 * 比如开发环境、测试环境和UAT环境
 * <code>Runtime<code>与<code>Cluster<code>
 * 是一对一的关系
 */
public interface Runtime {

	/************************************************
	 * 
	 *                 核心功能
	 *
	 ************************************************/
	/**
	 * 返回关联的集群信息
	 * 
	 * @return
	 */
	public Cluster getCluster();
	
	/**
	 * 为集群打上运行时标签
	 * 
	 * @param cluster
	 */
	public void bindCluster(Cluster cluster) throws Exception;
	
	/**
	 * 为集群解除运行时标签
	 * 
	 * @param cluster
	 */
	public void unbindCluster(Cluster cluster) throws Exception;
	
	/**
	 * 返回运行环境UUID
	 * 
	 * @return
	 */
	public String getUUID();
	
	/**
	 * 返回运行环境名
	 * 
	 * @return
	 */
	public String getName();
	
	/************************************************
	 * 
	 *                 查询功能
	 *
	 * 初级阶段，我们假设数据量不会太大，一次把所有数据全部取出
	 ************************************************/
	
	/**
	 * 返回所有应用UUID的列表
	 * 
	 * @return
	 * @throws Exception
	 */
	public List<String> getAllApplications() throws Exception;
	
	/**
	 * 返回所有应用实例UUID的列表
	 * 
	 * @return
	 * @throws Exception
	 */
	public List<String> getAllInstances() throws Exception;
	
	/**
	 * 返回指定主机UUID上所有应用实例UUID的列表
	 * 
	 * @param hostUUID
	 * @return
	 * @throws Exception
	 */
	public List<String> getAllInstances(String hostUUID) throws Exception;

	/**
	 * 获取运行环境的监测数据，会调用Monitor模块
	 * 为细粒度的Scheduler提供数据支持
	 * 
	 * @return
	 * @throws Exception
	 */
	public Object getMetrics() throws Exception;
	
	/**
	 * 获取主机的监测数据，会调用Monitor模块
	 * 为细粒度的Scheduler提供数据支持
	 * 
	 * @return
	 * @throws Exception
	 */
	public Object getMetric(String hostUUID) throws Exception;
	
	/**
	 * 获取运行环境的日志信息，会调用Logger模块
	 * 比如说dmesg信息
	 * 
	 * @return
	 * @throws Exception
	 */
	public Object getLogs(String hostUUID) throws Exception;
}
